package com.lanou3g.code0510.reflection;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test04 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person());
        //反射第一步  获取类类型
        //第一个参数  表示 方法名
        //后面的所有擦参数 需要传递 你要获取的方法的
        //参数类类型
        Class clazz = personList.getClass();
        Method method = clazz.getDeclaredMethod("add", Object.class);
        //如果是public方法,这行代码可以省略
        //否则需要加上
        method.setAccessible(true);

        method.invoke(personList,"String");
        //通过反射  成功将String类型的数据
        //放入了Person 泛型的list中
        //证明泛型在在编译期生效
        //在程序运行期,会统一擦除成object
        Object s = personList.get(1);
        System.out.println(s);
    }
}
